<?php
class CommonComponent extends Component{

	function SEO( $str )
	{
		if( strlen( $str ) == 0) return $str;
			$str = preg_replace('/(à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/', 'a', $str);
			$str = preg_replace('/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/', 'e', $str);
			$str = preg_replace('/(ì|í|ị|ỉ|ĩ)/', 'i', $str);
			$str = preg_replace('/(ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/', 'o', $str);
			$str = preg_replace('/(ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/', 'u', $str);
			$str = preg_replace('/(ỳ|ý|ỵ|ỷ|ỹ)/', 'y', $str);
			$str = preg_replace('/(đ)/', 'd', $str);
			$str = preg_replace('/(À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ)/', 'A', $str);
			$str = preg_replace('/(È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ)/', 'E', $str);
			$str = preg_replace('/(Ì|Í|Ị|Ỉ|Ĩ)/', 'I', $str);
			$str = preg_replace('/(Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ)/', 'O', $str);
			$str = preg_replace('/(Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ)/', 'U', $str);
			$str = preg_replace('/(Ỳ|Ý|Ỵ|Ỷ|Ỹ)/', 'Y', $str);
			$str = preg_replace('/(Đ)/', 'D', $str);
                        $str = preg_replace('/( )/', '-', $str);
		return $str;
	}

	function random_code($length = 6)
	{
		$str = "";
		$characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
		$max = count($characters) - 1;

		for ($i = 0; $i < $length; $i++) {
			$rand = mt_rand(0, $max);
			$str .= $characters[$rand];
		}
		return $str;
	}

	function create_symlink( $source, $dest, $force = false )
	{
		// namnb: thêm vào điều kiện is_dir trước khi tạo symlink
		// substr để bỏ đi dấu / ở cuối cùng, kiểm tra thư mục là đúng
		if( file_exists( $source ) == true && is_dir( substr( $dest, 0, -1 ) ) )
		{
			$dest .= basename( $source );
			if( file_exists( $dest ) == true )
			{
				if( $force == true )
				{
					unlink( $dest );           // xoa link cu
					symlink( $source, $dest ); // tao symlink
				}
				chmod( $dest, 0777 );
				return true;
			}
			if( @symlink( $source, $dest ) == FALSE )
			{
				@unlink( $dest );
				if(!symlink( $source, $dest ))// tao symlink
				return false;
			}
			chmod( $dest, 0777 );      // cho phep truy cap
			return true;
		}

		return false;
	}

	// Tạo hash cho những trường hợp đụng đến sự thay đổi về dữ liệu trong database: vd: thêm, sửa, xóa 1 record
	function hash_data( $function_name, $model, $id )
	{
		// Tạo khóa kiểm tra đăng nhập đến từ 1 url hợp lệ hay không
		return md5( md5( md5( 'NhaChung-PSN-' . $function_name . '-' . $model . '-' . $id ) ) );
	}

	function html( $data )
	{

		$patterns = array("/\&/", "/%/", "/</", "/>/", '/"/', "/'/", "/\(/", "/\)/", "/\+/", "/-/");
		$replacements = array("&amp;", "&#37;", "&lt;", "&gt;", "&quot;", "&#39;", "&#40;", "&#41;", "&#43;", "&#45;");

		if( is_array($data) )
		{
			foreach( $data as $key => $value ){
				if( $value != "" && is_string( $value ) ){
					$data[$key] = trim(preg_replace($patterns, $replacements, $value));
					// $data[$key] = trim(str_replace("\n", "<br>", $data[$key]));
				}
			}

		}elseif( is_string($data) )
		{
			$data = trim(preg_replace($patterns, $replacements, $data));
			// $data = trim(str_replace("\n", "<br>", $data));
		}
		return $data;
	}

	function html_decode( $data = array( ) )
	{
		$patterns = array("/&amp;/", "/&#37;/", "/&lt;/", "/&gt;/", "/&quot;/", "/&#39;/", "/&#40;/", "/&#41;/", "/&#43;/", "/&#45;/");
		$replacements = array("&", "%", "<", ">", '"', "'", "(", ")", "+", "-");

		if( is_array($data) )
		{
			foreach( $data as $key => $value ){
			if( $value != "" && is_string( $value ) ){
				$data[$key] = preg_replace($patterns, $replacements, $value);
				$data[$key] = str_replace("<br>", "\n", $data[$key]);
			}
		}
		}elseif( is_string($data) )
		{
			$data = preg_replace($patterns, $replacements, $data);
			$data = str_replace("<br>", "\n", $data);
		}
		return $data;
	}

	function fulltext( $field, $text, $conditions = array() )
	{
		$text = $this->html( trim($text) );

//		// $text phải được html trước khi truyền vào
//		$nhieu_fields = array( );
//		if(!is_array($field))
//		{
//			$nhieu_fields[] = $field;
//		}else
//		{
//			return $conditions;
//			$nhieu_fields = $field;
//		}

//		$field_search = implode( ',', $nhieu_fields );

		// bắt đầu tách chuỗi, thay tat ca khoang trang bang 1 khoang trang
		$text = ereg_replace('  +', ' ', trim( str_replace( ' ', ' ', $text )));
		$arr_words = split(' ', $text);
		if(!is_array($arr_words))
		{
			$arr_words[] = $text;
		}

		foreach( $arr_words as $key => $word )
		{
			$arr_words[$key] = $this->_add_sign_d_D($word);
		}

		// $conditions['OR'] = array(
		// 	'MATCH ('.$field.') AGAINST (\'+'.implode(' +', $arr_words).'\' IN BOOLEAN MODE )',
		// 	$field.' LIKE' => '%'.$text.'%'
		// );

		$conditions[] = 'MATCH ('.$field.') AGAINST (\'+'.implode(' +', $arr_words).'\' IN BOOLEAN MODE )';
		return $conditions;
	}

	function _add_sign_d_D( $mystring = null)
	{
		if( strpos($mystring, 'd') !== false || strpos($mystring, 'D') !== false)
		{
			$mystring = '('.$mystring.' '.str_replace(array('d', 'D'), array('đ', 'Đ'), $mystring ).')';
		}

		if( strpos($mystring, 'đ') !== false || strpos($mystring, 'Đ') !== false)
		{
			$mystring = '('.$mystring.' '.str_replace(array('đ', 'Đ'), array('d', 'D'), $mystring ).')';
		}
		return $mystring;
	}

	function string2date( $string = null, $ngancach = '-' )
	{
		if(strlen($string) == 10)
		{
			$arr = split('[\-\/\ \:-]', $string);
			$string = $arr[2].$ngancach.$arr[1].$ngancach.$arr[0];
		}
		return $string;
	}

	function string2date_full( $string = null, $ngancach = '-' )
	{
		if(strlen($string) == 10)
		{
			$arr = split('[\-\/\ \:-]', $string);

			if( strlen($arr[0]) == 1 )
			{
				$arr[0] = '0'.$arr[0];
			}

			if( strlen($arr[1]) == 1 )
			{
				$arr[1] = '0'.$arr[1];
			}

			// m/d/yyyy
			$string = $arr[2].$ngancach.$arr[1].$ngancach.$arr[0];
		}
		return $string;
	}

	function is_date( $input_date = null, $mode = 'dmy' )
	{

		//Nam nhap vao phai tu 1000-9999

		//Chuoi nhap vao phai co chieu dai la 10
		if( strlen( $input_date ) != 10 ){ return FALSE; }

		//Loai bo tat ca dau '/-\'
		//Nhung cai nao ki tu dat biet can them \ thi phai dat truoc
		$input_date = mb_ereg_replace( '[-/]','', $input_date );

		//Boi vi dau \ ko kiem tra bang regex dc nen danh xai` str_replace
		$input_date = str_replace( '\\', '', $input_date );

		//Sau khi loai bo thi chieu dai chuoi ddmmyyyy phai bang = 8
		//Neu ko kiem tra thi ngay 2//11/2008 se tra ve TRUE
		if( strlen( $input_date ) != 8 ){ return FALSE; }

		//Kiem tra tinh hop le cua thang/ngay/nam
		if( $mode == 'dmy' )
		{
			//1: dd/mm/yyyy
			$Day   = sprintf( '%d', substr( $input_date, 0,  2 ) );
			 $Month = sprintf( '%d', substr( $input_date, 2,  2 ) );
			 $Year  = sprintf( '%d', substr( $input_date, 4,  4 ) );
		}elseif( $mode == 'mdy' )
		{
			//2: mm/dd/yyyy
			$Month = sprintf( '%d', substr( $input_date, 0,  2 ) );
			 $Day   = sprintf( '%d', substr( $input_date, 2,  2 ) );
			 $Year  = sprintf( '%d', substr( $input_date, 4,  4 ) );
		}elseif( $mode == 'ymd' )
		{
			//3: yyyy/mm/dd
			$Year  = sprintf( '%d', substr( $input_date, 0,  4 ) );
			 $Month = sprintf( '%d', substr( $input_date, 4,  2 ) );
			 $Day   = sprintf( '%d', substr( $input_date, 6,  2 ) );
		}
		//The year is between 1 and 32767 inclusive.
		 return checkdate( $Month, $Day, $Year );
	}

	function date_convert( $input = null, $typein = 'dmy', $typeout = 'ymd', $symbol = '-', $hour = false  )
	{

		$input_root = $input;
		if( $hour == TRUE  )
		{
			$hour = substr( $input, 11, 8 );
		}

		// bo gio
		 $input = substr( $input, 0, 10 );

		 //Kiem tra nguoi nhap co nhap dung hay khong truoc khi convert
		if( $this->is_date( $input, $typein ) == FALSE )
		{
			return FALSE;
		}
		if( strlen( $input ) == 10 )
		{

			if( $typein == 'ymd' )
			{
				   $year = substr( $input, 0, 4 );
				   $month = substr( $input, 5, 2 );
				   $day = substr( $input, 8, 2 );
			}
			elseif( $typein == 'dmy' )
			{
				$day = substr( $input, 0, 2 );
				   $month = substr( $input, 3, 2 );
				   $year = substr( $input, 6, 4 );
			}

			if( $typeout == 'ymd' )
			{
				$output = $year.$symbol.$month.$symbol.$day;
			}elseif( $typeout == 'dmy' )
			{
				$output = $day.$symbol.$month.$symbol.$year;
			}
			//Neu giu lai time
			if( $hour == TRUE )
			{
				return $output.' '.$hour;
			}else
			{
				return $output;
			}
		}
		return $input_root;
	}

    function isEmail($email = '') {
        $regular = "/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+(\.[a-z]{2,3})+$/";
        if (preg_match ( $regular, $email )) {
            return true;
        } else {
            return false;
        }
    }

    function upCase($str){
        $lower = 'a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|đ|é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|í|ì|ỉ|ĩ|ị|ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|ý|ỳ|ỷ|ỹ|ỵ';
        $upper = 'A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ|Đ|É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ|Í|Ì|Ỉ|Ĩ|Ị|Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ|Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự|Ý|Ỳ|Ỷ|Ỹ|Ỵ';
        if( strlen( $str ) == 0) return $str;
        $arrayUpper = explode('|',preg_replace("/\n|\t|\r/","",$upper));
        $arrayLower = explode('|',preg_replace("/\n|\t|\r/","",$lower));
        return str_replace($arrayLower,$arrayUpper,$str);
    }

    function lowerCase($str){
        $lower = 'a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|đ|é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ|í|ì|ỉ|ĩ|ị|ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ|ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự|ý|ỳ|ỷ|ỹ|ỵ';
        $upper = 'A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ|Đ|É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ|Í|Ì|Ỉ|Ĩ|Ị|Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ|Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự|Ý|Ỳ|Ỷ|Ỹ|Ỵ';
        if( strlen( $str ) == 0) return $str;
        $arrayUpper = explode('|',preg_replace("/\n|\t|\r/","",$upper));
        $arrayLower = explode('|',preg_replace("/\n|\t|\r/","",$lower));
        return str_replace($arrayUpper,$arrayLower,$str);
    }

    /*
     * Hàm isAlphabet kiểm tra chuổi nhập ký tự alphabet
     */
    function isAlphabet( $str = null )
    {
        $str = trim($str);
        $str = htmlspecialchars($str, ENT_QUOTES);
        $array_alphabet = array('a', 'b', 'c', 'd', 'e' , 'f', 'g', 'h', 'i', 'j', 'k',
                                'l', 'm', 'n', 'o', 'p', 'q', 'r', 's' , 't', 'u','v', 'w', 'y', 'x','z',
                                'A', 'B', 'C', 'D', 'E' , 'F', 'G', 'H', 'I', 'J', 'K',
                                'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S' , 'T', 'U','V', 'W', 'Y', 'X', 'Z',
                                '1', '2', '3' , '4', '5', '6', '7', '8', '9', '0');
        if(strlen( $str ) == 0 && !is_string($str)) return false;
        else{
            $string_length = strlen($str);
            $i = 0;
            while ($i < $string_length){
                $ch = $str[$i];
                if(!in_array($ch, $array_alphabet))
                        return false;
                $i = $i + 1;
            }
        }
        return true;
    }

    /*
     * Hàm isAlphabetVn kiểm tra chuổi nhập ký tự alphabet của việt nam
     */
    function isAlphabetVn( $str = null )
    {
        $str = trim($str);
        $str = htmlspecialchars($str, ENT_QUOTES);
        $array_alphabet_vn = array('à','á','ạ','ả','ã','â','ầ','ấ','ậ','ẩ','ẫ','ă','ằ','ắ','ặ','ẳ','ẵ','a',
                                    'b', 'c', 'd','đ', 'e','è','é','ẹ','ẻ','ẽ','ê','ề','ế','ệ','ể','ễ','g','h',
                                    'i','ì','í','ị','ỉ','ĩ', 'k', 'l', 'm', 'n', 'o', 'ò','ó','ọ','ỏ','õ','ô','ồ',
                                    'ố','ộ','ổ','ỗ','ơ','ờ','ớ','ợ','ở','ỡ','p', 'q', 'r', 's' , 't', 'u','ù','ú','ụ','ủ','ũ','ư',
                                    'ừ','ứ','ự','ử','ữ' ,'v', 'y','ỳ','ý','ỵ','ỷ','ỹ', 'x','À','Á','Ạ','Ả','Ã','Â','Ầ','Ấ','Ậ','Ẩ',
                                    'Ẫ','Ă','Ằ','Ắ','Ặ','Ẳ','Ẵ','A','B', 'C', 'D','Đ', 'E','È','É','Ẹ','Ẻ','Ẽ','Ê','Ề','Ế','Ệ','Ể',
                                    'Ễ','G','H','I','Ì','Í','Ị','Ỉ','Ĩ', 'K', 'L', 'M', 'N', 'O', 'Ò','Ó','Ọ','Ỏ','Õ','Ô','Ồ',
                                    'Ố','Ộ','Ổ','Ỗ','Ơ','Ờ','Ớ','Ợ','Ở','Ỡ','P', 'Q', 'R', 'S' , 'T', 'U','Ù','Ú','Ụ','Ủ','Ũ','Ư',
                                    'Ừ','Ứ','Ự','Ử','Ữ' ,'V', 'Y','Ỳ','Ý','Y','Ỷ','Ỹ', 'X','1', '2', '3' , '4', '5', '6', '7', '8', '9', '0',' ');
        if(strlen( $str ) == 0 && !is_string($str)) return false;
        else{
            $string_length = strlen(_SEO($str));
            $i = 0;
            while ($i < $string_length){
                $ch = mb_substr($str,$i,1,"UTF-8");
                if(!in_array($ch, $array_alphabet_vn))
                        return false;
                $i = $i + 1;
            }
        }
        return true;
    }

    function _SEO_FILE( $str )
    {
            if( strlen( $str ) == 0) return $str;
                    $str = preg_replace('/(à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/', 'a', $str);
                    $str = preg_replace('/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/', 'e', $str);
                    $str = preg_replace('/(ì|í|ị|ỉ|ĩ)/', 'i', $str);
                    $str = preg_replace('/(ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/', 'o', $str);
                    $str = preg_replace('/(ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/', 'u', $str);
                    $str = preg_replace('/(ỳ|ý|ỵ|ỷ|ỹ)/', 'y', $str);
                    $str = preg_replace('/(đ)/', 'd', $str);
                    $str = preg_replace('/(À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ)/', 'a', $str);
                    $str = preg_replace('/(È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ)/', 'e', $str);
                    $str = preg_replace('/(Ì|Í|Ị|Ỉ|Ĩ)/', 'i', $str);
                    $str = preg_replace('/(Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ)/', 'o', $str);
                    $str = preg_replace('/(Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ)/', 'u', $str);
                    $str = preg_replace('/(Ỳ|Ý|Ỵ|Ỷ|Ỹ)/', 'Y', $str);
                    $str = preg_replace('/(Đ)/', 'd', $str);
                    $str = preg_replace('/( )/', '_', $str);
                    $str = preg_replace('/(-)/', '_', $str);
                    $str = preg_replace('/(?|`|~|!|@|#|$|%|^|&|\*|\(|\)|\+|{|}|:|;|"|\'|<|>|,|\.|\/)/', '', $str);
            return $str;
    }
}